
# 定义一个高阶函数 apply，它接受一个整数列表和一个转换函数作为参数
def apply(arr: list[int], f) -> list[int]:
    """
    将函数 f 应用于列表 arr 中的每一个元素，并返回一个新的列表。
    """
    result = []
    for x in arr:
        result.append(f(x))
    return result

# 示例函数1：求2倍
def double(x: int) -> int:
    return x * 2

# 示例函数2：求平方
def square(x: int) -> int:
    return x * x

# 示例函数3：加10
def add_ten(x: int) -> int:
    return x + 10

def main():
    # 创建测试数组
    numbers = [1, 2, 3, 4, 5]
    print(f"原始数组: {numbers}")
    
    # 示例1：使用 double 函数求每个元素的2倍
    doubled = apply(numbers, double)
    print(f"求2倍: {doubled}")
    
    # 示例2：使用 square 函数求每个元素的平方
    squared = apply(numbers, square)
    print(f"求平方: {squared}")
    
    # 示例3：使用 add_ten 函数给每个元素加10
    added_ten = apply(numbers, add_ten)
    print(f"加10: {added_ten}")
    
    # 示例4：使用匿名函数（lambda表达式）求3倍
    tripled = apply(numbers, lambda x: x * 3)
    print(f"求3倍(lambda): {tripled}")
    
    # 示例5：使用匿名函数求负数
    negated = apply(numbers, lambda x: -x)
    print(f"求负数(lambda): {negated}")
    
    # 示例6：复合操作 - 先乘2再加5
    complex_result = apply(numbers, lambda x: x * 2 + 5)
    print(f"乘2加5(lambda): {complex_result}")

if __name__ == "__main__":
    main()